package CamposDePotencial;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import javax.vecmath.Point3d;

import estrategia.ParametrosPotenciales;
import estrategia.Predictor;
import estrategia.Utiles;
import estrategia.Vector;

public class CampoCircularRepulsor extends CampoPotencial{

	private double radioCampo;
	private double minAlcance;
	private double Krepulsion;
	private double tamanioRobot;
	
	
	public CampoCircularRepulsor(int idObjeto, Utiles u, Predictor p) {
		// TODO Auto-generated constructor stub
		super(idObjeto, u, p);
	}
	
	
	public void  cargarConstantes() {
		
		radioCampo = ParametrosPotenciales.radioCampoRepulsorCircular;
		minAlcance = ParametrosPotenciales.minAlcanceCampoRepulsorCircular;
		Krepulsion = ParametrosPotenciales.KCampoRepulsorCircular;
		tamanioRobot = ParametrosPotenciales.tamanioRobot;
		
	}
	
	
	public double getMagnitudFuerza(Point3d mipos, Point3d posObj) {
		double magnitud = 0;
		double distancia = utiles.distanciaEuclidea(mipos, posObj);

		//double distanciaMiRobotObjetivo = utiles.distanciaEuclidea(mipos, objetivo);
		//double distanciaObjetoObjetivo = utiles.distanciaEuclidea(posObj, objetivo);
		
		distancia = distancia - tamanioRobot;
		
		if (distancia <= radioCampo) {
			// *(1/(Math.pow(distancia, 2)))
			magnitud = Krepulsion*((1/distancia) - (1/radioCampo));
		}
		
		return magnitud;
	}
	
	
	public Vector obtenerFuerza(Point3d mipos) throws IOException{
		cargarConstantes();
		
		double direccion = utiles.getAnguloTheta(predictor.predecirPosicion(idObjeto), mipos);
		
		double magnitud = getMagnitudFuerza(mipos, predictor.predecirPosicion(idObjeto));
		
		//System.out.println("La direccion del repulsor circular " + idObjeto + "es = " + direccion + "y la magnitud es: " + magnitud);
		 
		Vector resultante = new Vector(magnitud, direccion);
		
		resultante.setMagnitud(Math.abs(magnitud));
		
		return resultante;
	};
}
